双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,)

您所在的位置:网站首页 畸变矫正 可以裁剪图像吗 双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,)

双目立体视觉:四(双目标定matlab,图像校正,图像匹配,计算视差,disparity详解,)

2023-11-30 22:58| 来源: 网络整理| 查看: 265

二郎也比较忙,在某大场工作,有时候没有时间回复。 如果希望二郎尽快帮忙,可以将代码,数据和问题发给二郎,谢谢大家理解。 [email protected] 不过还是希望大家自己要好好研究,问二郎太基础性的问题,证明自己没有看过书籍,二郎就有一点点不太想回复了。 首先说明一点,需要用到matlab的stereoCameraCalibrator算法,该算法在2014a版本后添加的,因此之前的版本找不到,所以还是安装一个新版本的吧,我装的2016a。 这里说一下,换2016a可能会遇到打开图片特别慢,这里需要切换一下软件 opengl software(在matlab中执行) 切回硬件 opengl hardware 测试有没有stereo可以输入Enter stereoCameraCalibrator 我们在使用双目相机时,首先需要进行标定(就是相机有误差,我们需要消掉误差,如何消掉?加几个参数调节)

这里还要说明一个问题,有些人询问二郎为啥校正后图像会被截去很多,这里有几个原因: 1)相机畸变较大,两个相机的摆放位置偏差较大,截去较多是正常现象,不影响后期的匹配和距离计算。 2)如果后期出现了问题,则需要考虑是否把高阶畸变参数去掉,k3。 3)相机的摆放位置对其影响较大,应尽可能将两台相机放在同一直线上(光轴平行)。应尽可能避免使用两个性能不同的相机或者参数不一致的相机。

双目标定的流程

在这里插入图片描述 基本上按这个就可得到我们想要的校正双目误差的参数了。 下面强调几点过程中的注意事项 1.拍摄的图片是棋牌格,棋盘格的外围需要是长方形,不能是正方形,要不matlab会报数据错误。 2.在计算完成后注意保存mat 下面是流程图 在这里插入图片描述 然后将上面的“Skew”、“Tangential Distortion”以及“3 Coefficients”等选项选上,将“2 Coefficients”选项去掉(如果在接下来的步骤,你的参数有问题或者校正后的图像对异常,请去掉第三个参数,直接选择2 Coefficirents,因为在我们标定板精度不高时,采用较高的畸变参数可能会出现问题。)(这里图上为了方便直接默认着的): 在这里插入图片描述 Camera1代表左摄像头,Camera2代表右摄像头 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 保存后的参数在matlab的文件目录下,关掉该窗口后你就能看到 到这,我们的相机标定就结束了,我们最后得到一个mat文件。 mat文件解释 CameraParameters1为左摄像头的单独标定参数,CameraParameters2为右摄像头的单独标定参数。

stereoParams.TranslationOfCamera2:可以直接使用。 stereoParams.RotationOfCamera2:如需要在其他地方使用该矩阵,需转置以后使用(这里需要注意是用在哪里,转置后只是和我们平常见到的形式保持一致,方便我们分析,如果不导出直接在matlab中应用,多数情况下没有必要转置)。 在这里插入图片描述 CameraParameters1/CameraParameters2内 在这里插入图片描述 RadialDistortion:径向畸变,来源于光学透镜的特性,由K1,K2,K3确定。 TangentialDistortion:切向畸变,相机装配误差,传感器与光学镜头非完全平行,由两个参数P1,P2确定。 参数排序K1,K2,P1,P2,K3。 这里需要把我们的标定结果保存为mat,方便以后应用 save(‘my1stereoParams.mat’ , ‘stereoParams’);

图像校正流程

标定后,图像的校正其实非常简单,只需要代入函数即可

clear all clc I1 = imread('zed_left2.png');%读取左右图片 I2 = imread('zed_right2.png'); figure imshowpair(I1, I2, 'montage'); title('Original Images'); %加载stereoParameters对象。 load('my1stereoParams.mat');%加载你保存的相机标定的mat [J1, J2] = rectifyStereoImages(I1, I2, stereoParams); figure imshowpair(J1, J2, 'montage'); title('Undistorted Images');

立体图像校正将图像投影到共同的图像平面上,使得对应的点具有相同的行坐标。 我们完成了校正之后,我们再进行特征点匹配就能将两张图联系到一起,进而求得距离信息。 很多做法中,校正后需要看一下校正的结果,把第一个图像的红通道和第二个图像的蓝通道和绿通道结合构成图像,可以看出浅浅的叠影,红色的就是我们的图1,其他色的就是我们的图2

figure; imshow(cat(3, J1(:,:,1), J2(:,:,2:3)), 'InitialMagnification', 50);%图像显示50%

或者也可以用二郎写的一个程序,挺有意思的,让两个物体同时显示,利用到(图像融合,边缘提取)

WL1 = abs(imfilter(rgb2gray(J1), fspecial('Laplacian'), 'replicate', 'conv')); WL2 = abs(imfilter(rgb2gray(J2), fspecial('Laplacian'), 'replicate', 'conv')); WL1(WL1(:)>=WL2(:)) = 1;WL1(WL1(:)=WL2(:)) = 0;WL2(WL1(:)


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3